SenseMyFEUP data

Data loading

Data is filtered by travelmode (car and bus) and date (April 2016).

Top 10% points

    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
     1.0      9.0     37.0    828.1    189.0 873300.0 

ECDF

# Classifying points by day for ECDF 
df_intersession_april <-mutate(df_intersession_april, class = ifelse(hour(time) >7 & hour(time) < 20, 
                        "day",
                        "night"))
df_osm_edge <- df_intersession_april %>% 
  merge( y = df_osm_edge, by = "way_id") 
ggplot(df_osm_edge, aes(points, color= class)) + 
  scale_x_log10() + stat_ecdf(geom = "step")

ECDF all by #points

rr ecdf_all ecdf_day ecdf_night

ECDF by #sessions

Map points April 2016

Showing maps

Traffic Map April 2016

Traffic day Map April 2016

Traffic night Map April 2016

Map Intersession time all 1.30h.

Map Intersession time (<1.3h) day.

m_itm_day <- m
m_itm_day

#mapshot(m_night_semsessions, file = "~/maps/top_intersessions_night_april.png")

Map Intersession time (<2h)night.

m_itm_night <- m
m_itm_night

#mapshot(m, file = "~/maps/_all_april.png")

Intersession times

Intersession time

ECDF

Lowest 35%

By date

Speeds

Speed by week

Speed by day

Speed by hour

Number of session per hour

Ways_ids per half hour

LS0tCnRpdGxlOiAnU2Vuc2UgTXkgRkVVUCAtIEFwcmlsIDIwMTYgRGF0YScKYXV0aG9yOiAiRGFuaWVsYSBTLiBHaWwiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIGVjaG8gPSBGQUxTRSwgZXZhbD1GQUxTRX0KI3NhdmUuaW1hZ2UoIlNlbnNlbXlXb3JrU3BhY2UuUkRhdGEiKQpsb2FkKCJkZl9maXJzdF9zZXNzaW9uX2NhcnNfYXByaWwxNi5SZGEiKQpsb2FkKCJTZW5zZW15V29ya1NwYWNlLlJEYXRhIikKCmBgYAoKCiMgU2Vuc2VNeUZFVVAgZGF0YQoKIyMgRGF0YSBsb2FkaW5nCiBEYXRhIGlzIGZpbHRlcmVkIGJ5IHRyYXZlbG1vZGUgKGNhciBhbmQgYnVzKSBhbmQgZGF0ZSAoQXByaWwgMjAxNikuICAgICAgCgpgYGB7ciBlY2hvID0gRkFMU0UsIGV2YWw9RkFMU0V9CiNBbGwgcG9pbnRzCmRmX29zbV9lZGdlIDwtIGRmX3BvaW50c19lZGdlX2NhcnNfYXByaWwxNgoKI0RheQpkZl9vc21fZWRnZSA8LSBkZl9wb2ludHNfZWRnZV9jYXJzX2FwcmlsMTZfZGF5CgojIE5pZ2h0IApkZl9vc21fZWRnZSA8LSBkZl9wb2ludHNfZWRnZV9jYXJzX2FwcmlsMTZfbmlnaHQKCiNkZl8gPC0gZGZfZmlyc3Rfc2Vzc2lvbl9jYXJzX2FwcmlsMTYgJT4lCiMgIGZpbHRlciggSE9VUih0aW1lX3N0YXJ0KSA+IDcsIEhPVVIodGltZV9zdGFydCkgPCAyMCkKCmBgYAoKCmBgYHtyIGVjaG8gPSBGQUxTRSB9CiMgRmlsdGVyIGJ5IG1lZGlhbiBpbnRlcnNzaW9uIHRpbWUKZGZfb3NtX2VkZ2UgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsICU+JSAKICBncm91cF9ieSh3YXlfaWQpICU+JSAKICBzdW1tYXJpc2UobWVkaWFuX2l0bSA9IG1lZGlhbihpbnRlcnNlc3Npb25fdGltZSksIG5fc2Vzc2lvbiA9IG4oKSsxKSAlPiUgCiAgZmlsdGVyKG1lZGlhbl9pdG0gPCA5MCwgbl9zZXNzaW9uID4gNSkgJT4lIAogIG1lcmdlKCB5ID0gZGZfb3NtX2VkZ2UsIGJ5ID0gIndheV9pZCIpIAogIAojRmlsdGVyIGJ5IGRheSBhbmQgdGhlIG1lZGlhbiAKZGZfb3NtX2VkZ2UgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsICU+JSAKICBmaWx0ZXIoaG91cih0aW1lKSA+PTcsIGhvdXIodGltZSkgPD0gMjAsaW50ZXJzZXNzaW9uX3RpbWUgPiAwKSAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKG1lZGlhbl9pdG0gPSBtZWRpYW4oaW50ZXJzZXNzaW9uX3RpbWUpLCBuX3Nlc3Npb24gPSBuKCkrMSkgJT4lIAogIGZpbHRlciggbWVkaWFuX2l0bSA8IDkwKSAlPiUgCiAgbWVyZ2UoIHkgPSBkZl9vc21fZWRnZSwgYnkgPSAid2F5X2lkIikgCgojRmlsdGVyIGJ5IG5pZ2h0IGFuZCB0aGUgbWVkaWFuIApkZl9vc21fZWRnZSA8LSBkZl9pbnRlcnNlc3Npb25fYXByaWwgJT4lIAogIGZpbHRlcihpbnRlcnNlc3Npb25fdGltZSA+IDAsIGhvdXIodGltZSkgPCA3IHwgaG91cih0aW1lKSA+IDIwKSAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKG1lZGlhbl9pdG0gPSBtZWRpYW4oaW50ZXJzZXNzaW9uX3RpbWUpLCBuX3Nlc3Npb24gPSBuKCkrMSkgJT4lIAogIGZpbHRlciggbWVkaWFuX2l0bSA8IDEyMCkgJT4lIAogIG1lcmdlKCB5ID0gZGZfb3NtX2VkZ2UsIGJ5ID0gIndheV9pZCIpIAoKYGBgCgoKYGBge3IgZWNobz1GQUxTRX0KI05lY2Vzc2FyeSBmb3IgbWFwcGluZyAKI1Jlb3JkZXIgY29sdW1ucwpkZl9vc21fZWRnZSA8LSBkZl9vc21fZWRnZSAlPiUgCiAgc2VsZWN0KHdheV9pZCwgcG9pbnRzLCBtZWRpYW5faXRtLCBuX3Nlc3Npb24pCgpsaXN0X29zbV9lZGdlIDwtIGRmX29zbV9lZGdlWywgMV0KCmBgYAoKClRvcCAxMCUgcG9pbnRzCmBgYHtyIGVjaG8gPSBGQUxTRSwgZXZhbD1UUlVFfQpzdW1tYXJ5KGRmX29zbV9lZGdlJHBvaW50cykKcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLCAwLjkwKQoKZmlsdGVyKGRmX29zbV9lZGdlLCBwb2ludHMgPiBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsIDAuOTApICkgJT4lIAogIGdncGxvdChhZXMocG9pbnRzKSkgKwogIGdlb21faGlzdG9ncmFtKCkgCiAgCiAgCmBgYAoKIyMgRUNERiAKCmBgYHtyIGVjaG8gPSBGQUxTRSwgZXZhbCA9IEZBTFNFfQoKZnVuLmVjZGYgPC0gZWNkZihkZl9vc21fZWRnZSRwb2ludHMpCgpteS5lY2RmIDwtIGZ1bi5lY2RmKHNvcnQoZGZfb3NtX2VkZ2UkcG9pbnRzKSkKCm15X2VjZGZfZGYgPC0gZGF0YS5mcmFtZShteS5lY2RmKQoKbXlfZWNkZl9kZiRwb2ludHMgPC0gc29ydChkZl9vc21fZWRnZSRwb2ludHMpCnRhaWwobXlfZWNkZl9kZiwgNDAwKQoKYGBgCgpgYGB7ciBlY2hvPUZBTFNFIH0KI1BfYWxsIDwtIHN1YnNldChkZl9vc21fZWRnZSwgcG9pbnRzIDwgcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLC45KSkKI1BfZGF5IDwtIHN1YnNldChkZl9vc21fZWRnZSwgcG9pbnRzIDwgcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLC45KSkKI1BfbmlnaHQgPC0gc3Vic2V0KGRmX29zbV9lZGdlLCBwb2ludHMgPCBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsLjkpKQoKI1AgPC0gZWNkZihzdWJzZXQoZGZfb3NtX2VkZ2UsIHBvaW50cyA8IHF1YW50aWxlKGRmX29zbV9lZGdlJHBvaW50cywuOSkpJHBvaW50cykKI3Bsb3QoUCwgbG9nPSJ4IiwgeGxpbT1jKDEsIG1heChkZl9vc21fZWRnZSRwb2ludHMpKSkKYGBgCgpgYGB7cn0KIyBDbGFzc2lmeWluZyBwb2ludHMgYnkgZGF5IGZvciBFQ0RGIApkZl9pbnRlcnNlc3Npb25fYXByaWwgPC1tdXRhdGUoZGZfaW50ZXJzZXNzaW9uX2FwcmlsLCBjbGFzcyA9IGlmZWxzZShob3VyKHRpbWUpID43ICYgaG91cih0aW1lKSA8IDIwLCAKICAgICAgICAgICAgICAgICAgICAgICAgImRheSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJuaWdodCIpKQoKZGZfb3NtX2VkZ2UgPC0gZGZfaW50ZXJzZXNzaW9uX2FwcmlsICU+JSAKICBtZXJnZSggeSA9IGRmX29zbV9lZGdlLCBieSA9ICJ3YXlfaWQiKSAKCmdncGxvdChkZl9vc21fZWRnZSwgYWVzKHBvaW50cywgY29sb3I9IGNsYXNzKSkgKyAKICBzY2FsZV94X2xvZzEwKCkgKyBzdGF0X2VjZGYoZ2VvbSA9ICJzdGVwIikKYGBgCgpFQ0RGIGFsbCBieSAjcG9pbnRzIApgYGB7ciAgZWNobyA9IEZBTFNFLCBldmFsID0gVFJVRSB9CgplY2RmX2FsbCA8LSBnZ3Bsb3QoZGZfb3NtX2VkZ2UsIGFlcyhwb2ludHMpKSArIAogIHNjYWxlX3hfbG9nMTAoKSArIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKQoKZWNkZl9kYXk8LSBnZ3Bsb3QoZGZfb3NtX2VkZ2UsIGFlcyhwb2ludHMpKSArIAogIHNjYWxlX3hfbG9nMTAoKSArIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKSArIHRpdGxlKCJFQ0RGIGRheSIpCgplY2RmX25pZ2h0IDwtIGdncGxvdChkZl9vc21fZWRnZSwgYWVzKHBvaW50cykpICsgCiAgc2NhbGVfeF9sb2cxMCgpICsgc3RhdF9lY2RmKGdlb20gPSAic3RlcCIpICsgdGl0bGUoIkVDREYgbmlnaHQiKQoKZ3JpZC5hcnJhbmdlKGVjZGZfYWxsLGVjZGZfZGF5LGVjZGZfbmlnaHQsICBuY29sPTMpCgpgYGAKCmBgYHtyfQplY2RmX2FsbCAKZWNkZl9kYXkKZWNkZl9uaWdodApgYGAKCgpFQ0RGIGJ5ICNzZXNzaW9ucyAKCmBgYHtyIGVjaG89RkFMU0V9CmRmX2ludGVyc2Vzc2lvbl9hcHJpbCAlPiUgCiAgZ3JvdXBfYnkod2F5X2lkKSAlPiUgCiAgc3VtbWFyaXNlKHNlc3Npb25zID0gbigpICkgJT4lIAogIGdncGxvdChhZXMoc2Vzc2lvbnMpKSArIAogIHNjYWxlX3hfbG9nMTAoKSArIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKSAKICAKYGBgCiMjIE1hcCBwb2ludHMgQXByaWwgMjAxNgoKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1GQUxTRX0KIyBDcmVhdGluZyB0aGUgZW1wdHkgbWFwIG9mIFBvcnRvCgojUG9pbnRzCiNib3hwbG90KGRmX29zbV9lZGdlJHBvaW50cykKCmZldXAgPC0gcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLCAwLjk1KQpzdXBlcmlvciA8LSBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsIDAuOSkKbWVkaW8gPC0gcXVhbnRpbGUoZGZfb3NtX2VkZ2UkcG9pbnRzLCAwLjcpCmxvdyA8LSBxdWFudGlsZShkZl9vc21fZWRnZSRwb2ludHMsIDAuNSkgCgptIDwtIGxlYWZsZXQoKSAlPiUgc2V0Vmlldyhsbmc9LTguNjE0MTksIGxhdD00MS4xNjMxMSwgem9vbSA9IDEzKQptIDwtIGFkZFRpbGVzKG0pIAptIDwtIGFkZFByb3ZpZGVyVGlsZXMobSwgIkNhcnRvREIuUG9zaXRyb24iKQoKY291bnRlciA8LSAxCgpmb3Iod2F5X2lkIGluIGxpc3Rfb3NtX2VkZ2UpIHsKICAKICBkZl93YXlfaWQgPC0gZGJHZXRRdWVyeShjb25fb3NtLCBwYXN0ZTAoIlNFTEVDVCBzdF9hc3RleHQoc3RfdHJhbnNmb3JtKHdheSwgNDMyNikpIEFTIGxpbmUgRlJPTSBwbGFuZXRfb3NtX2xpbmUgV0hFUkUgcGxhbmV0X29zbV9saW5lLm9zbV9pZCA9ICIsIHdheV9pZCkpCiAgCiAgbGluZSA8LSBkZl93YXlfaWQkbGluZQogIGxpbmUgPC0gYXMuY2hhcmFjdGVyKGxpbmUpCiAgCiAgbGluZSA8LSB1bmxpc3Qoc3Ryc3BsaXQobGluZSwgc3BsaXQ9JygnLCBmaXhlZD1UUlVFKSlbMl0KICBsaW5lIDwtIHN1YnN0cihsaW5lLCAxLCBuY2hhcihsaW5lKSAtIDEpCiAgCiAgcGFyc2VkX2xpbmUgPC0gc3Ryc3BsaXQobGluZSwgIiwiKQogIAogIGxvbnMgPC0gYygpCiAgbGF0cyA8LSBjKCkKICAKICBpZihsZW5ndGgocGFyc2VkX2xpbmUpICE9IDApIHsKICAgIAogICAgI0RlZmluaW5nIGxvbnMgYW5kIGxhdHMgYXMgdmFyaWFibGVzIHRvIHVzZSBsYXRlci4KCiAgICBmb3IoY29vcmQgaW4gcGFyc2VkX2xpbmVbWzFdXSkgewogICAgICAKICAgICAgbG9uIDwtIHVubGlzdChzdHJzcGxpdChjb29yZCwgc3BsaXQ9JyAnLCBmaXhlZD1UUlVFKSlbMV0KICAgICAgbGF0IDwtIHVubGlzdChzdHJzcGxpdChjb29yZCwgc3BsaXQ9bG9uLCBmaXhlZD1UUlVFKSlbMl0KICAgICAgbGF0IDwtIHN1YnN0cihsYXQsIDIsIG5jaGFyKGxhdCkpCiAgICAgIAogICAgICBsb24gPC0gYXMubnVtZXJpYyhsb24pCiAgICAgIGxhdCA8LSBhcy5kb3VibGUobGF0KQogICAgICAKICAgICAgbG9ucyA8LSBjKGxvbnMsIGxvbikKICAgICAgbGF0cyA8LSBjKGxhdHMsIGxhdCkKICAgICAgCiAgICB9CiAgICAKICAgICMgRGVjaWRpbmcgdGhlIGNvbG9yIG9mIHRoZSBwb2ludC4KCiAgICBpZihkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA+IGZldXApIHsKICAgICAgICAgIAogICAgICAgICAgbSA8LSBhZGRQb2x5bGluZXMobSwgbG9ucywgbGF0cywgY29sb3I9J2JsdWUnKQogICAgICAgIAogICAgICAgIH0gZWxzZSBpZiAoZGZfb3NtX2VkZ2VbY291bnRlciwgMl0gPj0gc3VwZXJpb3IgJiYgZGZfb3NtX2VkZ2VbY291bnRlciwgMl0gPD0gZmV1cCkgewogICAgICAgICAgCiAgICAgICAgICBtIDwtIGFkZFBvbHlsaW5lcyhtLCBsb25zLCBsYXRzLCBjb2xvcj0ncmVkJykgIAogICAgICAgIAogICAgICAgIH0gZWxzZSBpZiAoZGZfb3NtX2VkZ2VbY291bnRlciwgMl0gPj0gbWVkaW8gJiYgZGZfb3NtX2VkZ2VbY291bnRlciwgMl0gPD0gc3VwZXJpb3IpIHsKICAgICAgICAgIAogICAgICAgICAgbSA8LSBhZGRQb2x5bGluZXMobSwgbG9ucywgbGF0cywgY29sb3I9J3llbGxvdycpCiAgICAgICAgICAKICAgICAgICB9IGVsc2UgaWYgKGRmX29zbV9lZGdlW2NvdW50ZXIsIDJdID49IGxvdyAmJiBkZl9vc21fZWRnZVtjb3VudGVyLCAyXSA8PSBtZWRpbykgewogICAgICAgICAgCiAgICAgICAgICBtIDwtIGFkZFBvbHlsaW5lcyhtLCBsb25zLCBsYXRzLCBjb2xvcj0nZ3JlZW4nKQogICAgICAgICAgCiAgICAgICAgfQogICAgICAgIAogICAgICAgIGNvdW50ZXIgPC0gY291bnRlciArIDEgCiAgICAgICAgCiAgICAgIH0KICAgICAgCiAgICAgICNwcmludChsaW5lKQogICAgICAKICAgIH0KCmBgYAojIyMgU2hvd2luZyBtYXBzIAoKVHJhZmZpYyAgTWFwIEFwcmlsIDIwMTYKYGBge3IgZXZhbD0gVFJVRX0KIyBTaG93aW5nIE1hcC4KbSAKI21hcHNob3QobSwgdXJsID0gcGFzdGUwKGdldHdkKCksICIvbWFwLmh0bWwiKSkKYGBgCgpUcmFmZmljIGRheSBNYXAgQXByaWwgMjAxNgpgYGB7ciBlY2hvPUZBTFNFfQptX2RheSA8LSBtCm1fZGF5CmBgYAoKVHJhZmZpYyBuaWdodCBNYXAgQXByaWwgMjAxNgpgYGB7ciBlY2hvPUZBTFNFfQptX25pZ2h0IDwtIG0KbV9uaWdodApgYGAKCk1hcCBJbnRlcnNlc3Npb24gdGltZSBhbGwgMS4zMGguCmBgYHtyIGVjaG89RkFMU0V9Cm1faXRtIDwtIG0KbV9pdG0KYGBgCgpNYXAgSW50ZXJzZXNzaW9uIHRpbWUgKDwxLjNoKSBkYXkuCmBgYHtyfQptX2l0bV9kYXkgPC0gbQptX2l0bV9kYXkKI21hcHNob3QobV9uaWdodF9zZW1zZXNzaW9ucywgZmlsZSA9ICJ+L21hcHMvdG9wX2ludGVyc2Vzc2lvbnNfbmlnaHRfYXByaWwucG5nIikKYGBgCk1hcCBJbnRlcnNlc3Npb24gdGltZSAoPDJoKW5pZ2h0LgpgYGB7cn0KbV9pdG1fbmlnaHQgPC0gbQptX2l0bV9uaWdodAojbWFwc2hvdChtLCBmaWxlID0gIn4vbWFwcy9fYWxsX2FwcmlsLnBuZyIpCmBgYAoKCiMjIEludGVyc2Vzc2lvbiB0aW1lcwoKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1GQUxTRX0KIyBUcmFuc2Zvcm1pbmcgc2Vjb25kcyB0byB0aW1lc3RhbXAgYW5kIGNhbGN1bGF0aW5nIGludGVyc2Vzc2lvbiB0aW1lLgoKZGZfaW50ZXJzZXNzaW9uX2FwcmlsJHRpbWUgPC0gYXMuUE9TSVhjdChkZl9pbnRlcnNlc3Npb25fYXByaWwkbWluLCBvcmlnaW49IjE5NzAtMDEtMDEiKQoKZGZfaW50ZXJzZXNzaW9uX2FwcmlsIDwtIGRmX2ludGVyc2Vzc2lvbl9hcHJpbCAgJT4lCiAgYXJyYW5nZShkZXNjKHdheV9pZCksIHRpbWUpICU+JSAKICBtdXRhdGUoaW50ZXJzZXNzaW9uX3RpbWUgPSBjKDAsYXMubnVtZXJpYyhkaWZmKHRpbWUpLCB1bml0cz0ibWlucyIpKSkKCiMgUmVtb3ZlIE1pbiBjb2x1bW4KIyBkZl9pbnRlcnNlc3Npb25fYXByaWwkbWluIDwtIE5VTEwgCmBgYAoKSW50ZXJzZXNzaW9uIHRpbWUgIApgYGB7ciBlY2hvPUZBTFNFfQpzdW1tYXJ5KGRmX2ludGVyc2Vzc2lvbl9hcHJpbCRpbnRlcnNlc3Npb25fdGltZSkKCmRmX2ludGVyc2Vzc2lvbl9hcHJpbCAlPiUgCiAgZmlsdGVyKGludGVyc2Vzc2lvbl90aW1lID4gMCkgJT4lIAogIGdncGxvdChhZXMoaW50ZXJzZXNzaW9uX3RpbWUvNjApKSArIAogIGdlb21faGlzdG9ncmFtKCkgKyAKICB4bGFiKCJJbnRlcnNlc3Npb24gdGltZSAoaG91cnMpIikgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsMjAwLDIwKSkKYGBgCgoKIyMjIEVDREYgCmBgYHtyIGVjaG89RkFMU0V9CmUxIDwtIGdncGxvdChzdWJzZXQoZGZfaW50ZXJzZXNzaW9uX2FwcmlsLCBpbnRlcnNlc3Npb25fdGltZSA+IDApLCBhZXMoaW50ZXJzZXNzaW9uX3RpbWUpKSArIAogIHN0YXRfZWNkZihnZW9tID0gInN0ZXAiKSArICB4bGFiKCJJbnRlcnNlc3Npb24gdGltZSIpCgplMiA8LSBnZ3Bsb3Qoc3Vic2V0KGRmX2ludGVyc2Vzc2lvbl9hcHJpbCwgaW50ZXJzZXNzaW9uX3RpbWUgPiAwKSwgYWVzKGludGVyc2Vzc2lvbl90aW1lKSkgKyAKICBzY2FsZV94X2xvZzEwKCkgK3N0YXRfZWNkZihnZW9tID0gInN0ZXAiKSAgKyB4bGFiKCJJbnRlcnNlc3Npb24gdGltZSBMb2ciKQoKZ3JpZC5hcnJhbmdlKGUxLCBlMiwgbmNvbD0gMikKYGBgCgoKIyMjIExvd2VzdCAzNSUgCgoKYGBge3IgZWNobz1GQUxTRSwgZXZhbD1UUlVFfQpzdWJzZXQoZGZfaW50ZXJzZXNzaW9uX2FwcmlsLCBpbnRlcnNlc3Npb25fdGltZSA8IHF1YW50aWxlKGRmX2ludGVyc2Vzc2lvbl9hcHJpbCRpbnRlcnNlc3Npb25fdGltZSwgMC4zNSkpICU+JSAKICBnZ3Bsb3QoYWVzKGludGVyc2Vzc2lvbl90aW1lKSkgKwogIGdlb21faGlzdG9ncmFtKGJpbnMgPSAxMCkgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsMjAwLDE1KSkrCiAgeGxhYigiSW50ZXJzZXNzaW9uIHRpbWUgKG1pbnMpIikKYGBgCgoKYGBge3J9CmRmX2ludGVyc2Vzc2lvbl9hcHJpbCAlPiUgCiAgZmlsdGVyKGludGVyc2Vzc2lvbl90aW1lID4gMCkgJT4lIAogIGdyb3VwX2J5KHdheV9pZCkgJT4lIAogIHN1bW1hcmlzZShtZWRpYW5faXRtID0gbWVkaWFuKGludGVyc2Vzc2lvbl90aW1lKSwgbl9zZXNzaW9uID0gbigpKzEpICU+JSAKICBmaWx0ZXIobWVkaWFuX2l0bSA8IDEzMCkgJT4lIAogIGdncGxvdChhZXMobWVkaWFuX2l0bSkpICsgCiAgZ2VvbV9oaXN0b2dyYW0oYmlucyA9IDMwKSArIAogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwxNTAsNSkpCgpgYGAKCgojIyBCeSBkYXRlIAoKYGBge3IgZWNobz0gRkFMU0V9IApkZl9pbnRlcnNlc3Npb25fYXByaWwgJT4lIAogIGdyb3VwX2J5KHdlZWtkYXkgPXdkYXkodGltZSkpICU+JSAKICBzdW1tYXJpc2Uod2F5X2lkcyA9IG4oKSkgJT4lIAogIGdncGxvdChhZXMod2Vla2RheSx3YXlfaWRzKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDIzLDEpKQoKYGBgCgpgYGB7ciBlY2hvPSBGQUxTRX0KZGZfaW50ZXJzZXNzaW9uX2FwcmlsICU+JSAKICBncm91cF9ieShkYXkgPWRheSh0aW1lKSkgJT4lIAogIHN1bW1hcmlzZShuID0gbigpKSAlPiUgCiAgZ2dwbG90KGFlcyhkYXksbikpICsgCiAgZ2VvbV9saW5lKCkgKyAKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDEsMzAsMSkpCgpgYGAKCmBgYHtyIGVjaG89IEZBTFNFfSAKZGZfaW50ZXJzZXNzaW9uX2FwcmlsICU+JSAKICBncm91cF9ieShob3VyID1ob3VyKHRpbWUpKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JSAKICBnZ3Bsb3QoYWVzKGhvdXIsbikpICsgCiAgZ2VvbV9saW5lKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwyMywxKSkKCmBgYAoKIyMgU3BlZWRzIAoKYGBge3J9CiMgU3BlZWQgYnkgd2F5X2lkIGFuZCBzZXNzaW9uLlwKYXZnX3NwZWVkX3dheWlkIDwtIGRmX3NwZWVkICU+JSAKICBncm91cF9ieSh3YXlfaWQpICU+JSAKICBzdW1tYXJpc2UoYXZnX3NwZWVkID0gbWVhbigoc3BlZWQqMTgpLzUpLCBuID0gbigpICkKCmdncGxvdChhdmdfc3BlZWRfd2F5aWQsIGFlcyhhdmdfc3BlZWQpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSA1KSArIAogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkF2Z19zcGVlZChtL3MpIiwgIGJyZWFrcyA9IHNlcSgwLCAxNTAsIDEwKSApCmBgYAoKU3BlZWQgYnkgd2VlayAKYGBge3IgZWNobz1GQUxTRX0KZGZfc3BlZWQgJT4lIApncm91cF9ieSh3ZWVrZGF5ID13ZGF5KHRpbWUpKSAlPiUgCiAgc3VtbWFyaXNlKGF2Z19zcGVlZCA9IG1lYW4oKHNwZWVkKjE4KS81KSkgJT4lIAogIGdncGxvdChhZXMod2Vla2RheSwgYXZnX3NwZWVkKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDcsMSkpKwogIHlsYWIoIkF2ZyBzcGVlZCBrbS9oIikKYGBgCgpTcGVlZCBieSBkYXkKCmBgYHtyIGVjaG89RkFMU0V9CmRmX3NwZWVkICU+JSAKICBncm91cF9ieShkYXkgPWRheSh0aW1lKSkgJT4lIAogIHN1bW1hcmlzZShhdmdfc3BlZWQgPSBtZWFuKChzcGVlZCoxOCkvNSkpICU+JSAKICBnZ3Bsb3QoYWVzKGRheSwgYXZnX3NwZWVkKSkgKyAKICBnZW9tX2xpbmUoKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLDMwLDEpKSsKICB5bGFiKCJBdmcgc3BlZWQga20vaCIpCmBgYAoKU3BlZWQgYnkgaG91cgpgYGB7ciBlY2hvPUZBTFNFfQpkZl9zcGVlZCAlPiUgCiAgZ3JvdXBfYnkoaG91ciA9aG91cih0aW1lKSkgJT4lIAogIHN1bW1hcmlzZShhdmdfc3BlZWQgPSBtZWFuKChzcGVlZCoxOCkvNSkpICU+JSAKICBnZ3Bsb3QoYWVzKGhvdXIsIGF2Z19zcGVlZCkpICsgCiAgZ2VvbV9saW5lKCkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwyMywxKSkrCiAgeWxhYigiQXZnIHNwZWVkIGttL2giKQpgYGAKCk51bWJlciBvZiBzZXNzaW9uIHBlciBob3VyCmBgYHtyIGVjaG89RkFMU0V9CmRmX3NwZWVkICU+JSAKICAgIGdyb3VwX2J5KGhvdXIgPWhvdXIodGltZSkpICU+JSAKICAgIHN1bW1hcmlzZShzZXNzaW9ucyA9IG5fZGlzdGluY3Qoc2Vzc2lvbl9pZCkpICU+JSAKICBnZ3Bsb3QoYWVzKGhvdXIsIHNlc3Npb25zKSkgKyAKICBnZW9tX2xpbmUoKSsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsMjMsMSkpCmBgYAoKV2F5c19pZHMgcGVyIGhhbGYgaG91cgpgYGB7cn0KcHJ1ZWJhIDwtIHRhYmxlKGN1dChkZl9zcGVlZCR0aW1lLCBicmVha3MgPSAiMzAgbWlucyIpKQpwbG90KHBydWViYSwgeGxhYiA9ICJkYXRlIiwgeWxhYiA9ICJmcmVxdWVuY3kiKQpgYGAKCgoKCgoKCgo=